
/**
 * 给你一个整数 n ，请你找出并返回第 n 个 丑数 。
 *
 * 丑数 就是只包含质因数 2、3 和/或 5 的正整数。
 */
public class Test264 {
    public static void main(String[] args) {
        System.out.println(nthUglyNumber(7));
    }
    public static int nthUglyNumber(int n) {
        if (n == 1) return 1;

        int[] dp = new int[n+1];
        dp[1] = 1;
        int n2 = 1;
        int n3 = 1;
        int n5 = 1;
        for (int i = 2; i <= n; i++) {
            int num2 = dp[n2]*2;
            int num3 = dp[n3]*3;
            int num5 = dp[n5]*5;
            dp[i] = Math.min(Math.min(num2, num3), num5);
            if (dp[i] == num2) {
                n2++;
            }
            if (dp[i] == num3) {
                n3++;
            }
            if (dp[i] == num5) {
                n5++;
            }
        }
        return dp[n];
    }
}
